package edu.server.dominio;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import edu.server.repositorio.ClaseProducto;
import edu.server.util.HibernateUtil;

public class D_ClaseProducto {
	
	public D_ClaseProducto()
	{
		
	}
	
	/**
	 * Método que busca en la base de datos todas las clases de producto cargadas
	 * @return una lista de objetos del tipo ClaseProducto.
	 */
	@SuppressWarnings("unchecked")
	public List<ClaseProducto> buscarClasesProducto()
	{
		List<ClaseProducto> clasesProducto; 
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		String hql = "From ClaseProducto";
		
		Query query = session.createQuery(hql);
		
		clasesProducto = query.list();
		
		session.close();
		
		return clasesProducto;
	}
	
	/**
	 * Método que busca en la base de datos una clase de producto con el código de clase pasado como parámetro.
	 * @param codigoClase. Es el código de clase de la clase a buscar.
	 * @return clase. Retorna la clase de producto que tiene el código de clase pasado como parámetro.
	 */
	public ClaseProducto buscarClaseProducto(int codigoClase)
	{
		ClaseProducto clase;
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		clase = (ClaseProducto) session.createQuery("FROM ClaseProducto WHERE codigoClaseProducto = " + codigoClase).uniqueResult();
		
		session.close();
		
		return clase;
	}

	
	/**
	 * Método que busca en la base de datos una clase de producto con el nombre de clase pasado como parámetro.
	 * @param nombreClase. Es el nombre de clase de la clase a buscar.
	 * @return clase. Retorna la clase de producto que tiene el código como nombre el pasado como parámetro.
	 */
	public ClaseProducto buscarClaseProducto(String nombreClase)
	{
		ClaseProducto clase;
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		clase = (ClaseProducto) session.createQuery("FROM ClaseProducto WHERE nombre LIKE '" + nombreClase + "'").uniqueResult();
		
		session.close();
		
		return clase;
	}
	
	
	/**
	 * Método que guarda en la base de datos una clase de producto.
	 * @param clase. Clase de producto que se pretende guardar.
	 */
	public void registrarClaseProducto(ClaseProducto clase) throws Exception
	{
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		try{			
			session.beginTransaction();
			
			session.save(clase);				
			
			session.getTransaction().commit();
		}
		
		catch(Exception e)
		{
			session.getTransaction().rollback();
			
			throw e;
		}
	}
}
